import type {
  EntityApi,
  EntityPage,
  EntityReq,
  EntityModel,
  EntityImportReq,
  EntityExportReq,
  EntityKey,
  EntityKeyList,
  EntityCreateReq,
  EntityUpdateReq,
} from "jmash-core";
export interface ResourceApi extends EntityApi {}

export interface ResourceReq extends EntityReq {
  // 租户ID
  tenant?: string;
  // 所属模块ID（可选）
  moduleId?: string;
  // 资源名称模糊查询（可选）
  likeResourceName?: string;
  // 是否隐藏（精确匹配，可选）
  hidden?: boolean;
  // 是否包含隐藏资源（可选）
  hasHidden?: boolean;
  // 资源ID（精确匹配，可选）
  resourceId?: string;
  // 父资源ID
  parentId?: string;
}

// 角色管理分页
export interface ResourcePage extends EntityPage {
  // 内容
  results: Array<ResourceModel>;
}

/**
 * 资源表单接口
 */
export interface ResourceCreateReq extends EntityCreateReq {
  // 租户ID（可选）
  tenant?: string;
  // 所属模块ID
  moduleId?: string;
  // 上级资源ID（可选）
  parentId?: string;
  // 资源类型（可选）
  resourceType?: string;
  // 图标（可选）
  icon?: string;
  // 资源名称
  resourceName?: string;
  // 资源编码（可选）
  resourceCode?: string;
  // 资源路径
  url?: string;
  // 操作权限列表（可选）
  operCodes?: string[];
  // 目标（可选）
  target?: string;
  // 是否隐藏（可选）
  hidden?: boolean;
  // 请求ID（用于防止重复提交，可选）
  requestId?: string;
  //缓存页面
  keepAlive?: boolean;
}

/**
 * 资源表单接口
 */
export interface ResourceUpdateReq extends EntityUpdateReq {
  // 租户ID（可选）
  tenant?: string;
  // 所属模块ID
  moduleId?: string;
  // 上级资源ID（可选）
  parentId?: string;
  // 资源类型（可选）
  resourceType?: string;
  // 图标（可选）
  icon?: string;
  // 资源名称
  resourceName?: string;
  // 资源编码（可选）
  resourceCode?: string;
  // 资源路径
  url?: string;
  // 操作权限列表（可选）
  operCodes?: string[];
  // 目标（可选）
  target?: string;
  // 是否隐藏（可选）
  hidden?: boolean;
  // 资源ID（编辑时需提供）
  resourceId?: string;
  // 更新字段掩码（用于指定更新哪些字段，可选）
  updateMask: string;
  // 请求ID（用于防止重复提交，可选）
  requestId?: string;
  //缓存页面
  keepAlive?: boolean;
}

export type ResourceFormReq = ResourceCreateReq | ResourceUpdateReq;

// 资源表实体
export interface ResourceModel extends EntityModel {
  // 资源ID
  resourceId: string;
  // 模块ID
  moduleId?: string;
  // 模块编码
  moduleCode?: string;
  // 资源编码
  resourceCode?: string;
  // 资源名称
  resourceName?: string;
  // 资源类型
  resourceType?: string;
  // 父资源ID
  parentId?: string;
  // 深度
  depth?: number;
  // 排序
  orderBy?: number;
  // 目标
  target?: string;
  // URL
  url?: string;
  // 是否隐藏
  hidden?: boolean;
  // icon_
  icon?: string;
  //缓存页面
  keepAlive?: boolean;
  // 是否叶子
  isLeaf?: boolean;
  // 是否包含孩子
  hasChildren?: boolean;
}

// 资源表主键
export interface ResourceKey extends EntityKey {
  // 租户
  tenant?: string;
  resourceId?: string;
}

export interface ResourceKeyList extends EntityKeyList {
  // 租户
  tenant?: string;
  // 资源ID
  resourceId?: string[];
}

export interface ResourceMoveKey {
  // 租户
  tenant?: string;
  resourceId?: string;
  up?: boolean;
}

// 导入请求
export interface ResourceImportReq extends EntityImportReq {
  // 租户
  tenant: string;
  // 用于检测重复请求的唯一字符串ID
  requestId: string;
  // 文件名
  fileNames?: string;
  // 是否新增标识
  addFlag?: boolean;
  // 更新字段掩码.
  updateMask: string;
}

// 导出请求
export interface ResourceExportReq extends EntityExportReq {
  // 租户
  tenant: string;
  // 标题
  title?: string;
  // 显示文件名
  fileName?: string;
  resourceId?: string;
  // 筛选条件
  req: ResourceReq;
}

// 资源表主键
export interface ResourceParam {
  // 租户
  tenant?: string;
  resourceId?: string;
  parentId?: string;
  moduleId?: string;
}
